﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Modelo;
using System.Collections;
using System.Text.RegularExpressions;

namespace Proceso
{
    public class GestorEmpleado
    {
        public static bool VerificarCi(string ci)
        {
            string pattern = @"^[0-9]*$";
            List<Empleado> list = new List<Empleado>();
            list = BaseDatos.BDEmpleado.DevolverTodos();
            if (!Regex.IsMatch(ci, pattern))
            {
                throw new Exception("Introduzca solo numeros");
            }
            if (list != null)
            {
                foreach (var item in list)
                {
                    if (item.Ci.ToString().Equals(ci))
                        throw new Exception("Este carnet ya existe");
                }
            }
            return true;
        }
        public static void RegistrarEmpleado(string ci, string nombre, string ap, string am, string dir, string tel, string cel, string email)
        {
            Empleado empleado= new Empleado();
            string emailPattern = @"^(?("")(""[^""]+?""@)|(([0-9a-zA-Z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-zA-Z])@))" +
                             @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,6}))$";
            string pattern = @"^[a-zA-Z0-9 ]*$";
            string Npattern = @"^[0-9]*$";
            empleado.Ci = Int64.Parse(ci);
            if (!String.IsNullOrEmpty(nombre))
            {
                if (!Regex.IsMatch(nombre, pattern))
                    throw new Exception("Caracteres especiales no permitidos");
                empleado.Nombre=nombre;
            }
            else
                throw new Exception ("El nombre es obligatorio");
            if (!String.IsNullOrEmpty(ap))
            {
                if (!Regex.IsMatch(ap, pattern))
                    throw new Exception("Caracteres especiales no permitidos");
                empleado.ApellidoPaterno = ap;
            }
            else
                throw new Exception("El apellido paterno es obligatorio");
            if (!String.IsNullOrEmpty(am))
            {
                if (!Regex.IsMatch(am, pattern))
                    throw new Exception("Caracteres especiales no permitidos");
                empleado.ApellidoMaterno = am;
            }
            if (!String.IsNullOrEmpty(dir))
            {
                if (!Regex.IsMatch(dir, pattern))
                    throw new Exception("Caracteres especiales no permitidos");
                empleado.Direccion = dir;
            }
            else
                throw new Exception("La direccion es obligatoria");
            if (!String.IsNullOrEmpty(tel))
            {
                if (!Regex.IsMatch(tel, Npattern))
                    throw new Exception("Ingrese solo numeros");
                empleado.Telefono = Int64.Parse(tel);
            }
            else
                throw new Exception("El telefono es obligatorio");
            if (!String.IsNullOrEmpty(cel))
            {
                if (!Regex.IsMatch(cel, Npattern))
                    throw new Exception("Caracteres especiales no permitidos");
                empleado.Celular = Int64.Parse(cel);
            }
            if (!String.IsNullOrEmpty(email))
            {
                if (!Regex.IsMatch(email, emailPattern))
                    throw new Exception("Formato incorrecto de email");
                empleado.Email = email;
            }
            try
            {
                BaseDatos.BDEmpleado.InsertarEmpleado(empleado);

            }catch(Exception)
            {
                throw;
            }
            

       
        }
        public static List<EmpleadoSalario> buscarPorCi(string ci,string nombre,string apellido)
        {
            try
            {
                List<EmpleadoSalario> empleados = new List<EmpleadoSalario>();
                if (String.IsNullOrEmpty(ci))
                {
                    List<long> cis = BaseDatos.BDEmpleado.CiEmpleados(nombre, apellido);
                    foreach (long c in cis)
                        empleados.Add(BaseDatos.BDEmpleado.BuscarEmpleado(c));
                }
                else
                {
                    long num = Convert.ToInt64(ci);
                    EmpleadoSalario emp = BaseDatos.BDEmpleado.BuscarEmpleado(num);
                    if(emp!=null)
                    empleados.Add(emp);
                }
                return empleados;
            }
            catch (FormatException)
            {
                throw new Exception("No es un ci valido");
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}
